/**
 * 题目
 * Semantic Versioning 是一个前端通用的版本定义规范。
 * 格式为“{MAJOR}.{MINOR}.{PATCH}-{alpha|beta|rc}.{number}”，
 * 要求实现 compare(a, b) 方法，比较 a, b 两个版本大小。
 * 
 * 描述
 * •当 a > b 是返回 1；
 * •当 a = b 是返回 0；
 * •当 a < b 是返回 -1；
 * •其中，rc > beta > alpha，major > minor > patch；
 * 
 * 例子
 * 1.2.3 < 1.2.4 < 1.3.0.alpha.1 < 1.3.0.alpha.2 < 1.3.0.beta.1 < 1.3.0.rc.1 < 1.3.0
*/

function compareVersion(str1, str2) {
  // 创建 rc, beta, alpha 权重, 替换为数值
  let map = { rc: 3, beta: 2, alpha: 1 }
  str1 = str1.replace(/(rc|beta|alpha)/g, match => map[match])
  str2 = str2.replace(/(rc|beta|alpha)/g, match => map[match])
  // 分割字符
  const arr1 = str1.split('.')
  const arr2 = str2.split('.')
  // 比较大小
  function compareArr(arr1, arr2) {
    let i = 0
    while (i < Math.max(arr1.length, arr2.length)) {
      const num1 = parseInt(arr1[i] || 0, 10)
      const num2 = parseInt(arr2[i] || 0, 10)
      
      if (num1 > num2) return 1
      if (num1 < num2) return -1
      i++
    }
    return 0
  }
  // 返回比较结果
  return compareArr(arr1, arr2)
}

// 测试
let str1 = "1.2.3.alpha.1";
let str2 = "3.3.0.rc.1";
console.log(compareVersion(str1, str2)); // -1
